From: Florian Müllner Date: Fri, 17 Nov 2023 17:31:32 +0000 (+0100) Subject: shellDBus: Await Eval() result X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~281^2~2^2~291 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=f2601e68885b859e257868ef848722e3eb6ee990;p=gnome-shell.git shellDBus: Await Eval() result The Eval() method currently evaluates the provided string, and returns the result immediately. This isn't useful when a promise is returned, which has become much more likely now that accessing any module requires import(). Simply await the result, to handle both sync and async code. Part-of: --- diff --git a/js/ui/shellDBus.js b/js/ui/shellDBus.js index 12ca261c8..3b99224ce 100644 --- a/js/ui/shellDBus.js +++ b/js/ui/shellDBus.js @@ -56,17 +56,22 @@ export class GnomeShell { * If evaluation fails, then the return value will be * [false, JSON.stringify(exception)]; * - * @param {string} code A string containing JavaScript code - * @returns {Array} + * @async + * @param {...any} params - method parameters + * @param {Gio.DBusMethodInvocation} invocation - the invocation + * @returns {void} */ - Eval(code) { - if (!global.context.unsafe_mode) - return [false, '']; + async EvalAsync(params, invocation) { + if (!global.context.unsafe_mode) { + invocation.return_value(new GLib.Variant('(bs)', [false, ''])); + return; + } + const [code] = params; let returnValue; let success; try { - returnValue = JSON.stringify(eval(code)); + returnValue = JSON.stringify(await eval(code)); // A hack; DBus doesn't have null/undefined if (returnValue === undefined) returnValue = ''; @@ -75,7 +80,8 @@ export class GnomeShell { returnValue = `${e}`; success = false; } - return [success, returnValue]; + invocation.return_value( + new GLib.Variant('(bs)', [success, returnValue])); } /**